#include <stdio.h>

// 但是这种解决方式不是字典序，
// 有没有方法让它按字典序输出？？？


void solve(int *arr,int start,int end)
{
    if (start == end)
    {
        // 当递归到末尾时，打印结果
        for (int i = 0;i <= end;i++)
        {
            printf("%d ",arr[i]);
        }
        printf("\n");
        return;
    }

    for (int i = 0;i <= end;i++)
    {
        // 交换当前值与开始值？？？
        int temp = arr[i];
        arr[i] = arr[start];
        arr[start] = temp;

        // 调用从下一开始的递归？？？
        solve(arr,start+1,end);

        // 回溯后执行还原！！！很多问题都是如此，比如turtle绘图！！！！
        temp = arr[start];
        arr[start] = arr[i];
        arr[i] = temp;
    }
}

int main()
{
    int arr[3] = {1,2,3};
    solve(arr,0,2);
    return 0;
}